# Copyright (c) 2023 DoubleByte. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Write by chengxuya

import sys

from pybuildcc.src.target import Target

SOURCES = [
    '//src/build_log.cc',
    '//src/build.cc',
    '//src/clean.cc',
    '//src/clparser.cc',
    '//src/debug_flags.cc',
    '//src/depfile_parser.cc',
    '//src/deps_log.cc',
    '//src/disk_interface.cc',
    '//src/dyndep.cc',
    '//src/dyndep_parser.cc',
    '//src/edit_distance.cc',
    '//src/eval_env.cc',
    '//src/graph.cc',
    '//src/graphviz.cc',
    '//src/json.cc',
    '//src/lexer.cc',
    '//src/line_printer.cc',
    '//src/manifest_parser.cc',
    '//src/metrics.cc',
    '//src/missing_deps.cc',
    '//src/parser.cc',
    '//src/state.cc',
    '//src/status.cc',
    '//src/string_piece_util.cc',
    '//src/util.cc',
    '//src/version.cc',
    '//src/getopt.c',
]
if sys.platform == 'win32':
    SOURCES += [
        '//src/subprocess-win32.cc',
        '//src/includes_normalize-win32.cc',
        '//src/msvc_helper-win32.cc',
        '//src/msvc_helper_main-win32.cc',
        '//src/minidump-win32.cc',
    ]
else:
    SOURCES += [
        '//src/subprocess-posix.cc',
    ]

class Ninja(Target):
    NINJA_SOURCES = SOURCES + [
        '//src/ninja.cc',
    ]

    def __init__(self, src_dir: str, out_dir: str):
        super().__init__('ninja', src_dir, self.NINJA_SOURCES, [], [], ['-O3'])
        super().build(out_dir)

class NinjaTest(Target):
    NINJA_TEST_SOURCES = SOURCES + [
        '//src/ninja_test.cc',
        '//src/test.cc',
        '//src/util_test.cc',
        '//src/json_test.cc',
        '//src/build_test.cc',
    ]

    def __init__(self, src_dir: str, out_dir: str):
        super().__init__('ninja_test', src_dir, self.NINJA_TEST_SOURCES, [], [])
        super().build(out_dir)

def build_targets(root_dir: str, target: str):
    out_dir = root_dir + '/out'
    src_dir = root_dir

    if target == 'test':
        NinjaTest(src_dir, out_dir)
    else:
        Ninja(src_dir, out_dir)
